iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0
AI/ ML & Data

機器學習與深度學習背後框架與過程論文與實作系列 第 25

DAY25 多層感知器 Multi-Layer Perceptron 25/30

  • 分享至 

  • xImage
  •  

多層感知器 (Multi-Layer Perceptron, MLP) 是一種前饋神經網絡,並且是最基本的深度學習模型之一。MLP 由至少三層組成:一個 輸入層、一個或多個 隱藏層,以及一個 輸出層。MLP 能夠通過學習非線性決策邊界,解決複雜的分類與回歸問題。

  1. MLP 結構
    MLP 的基本結構包括以下幾層:

輸入層 (Input Layer):直接接收特徵數據,與樣本的維度相同,每個節點代表一個特徵。

隱藏層 (Hidden Layer):MLP 至少有一個隱藏層,每個隱藏層中的神經元都通過加權求和和激活函數進行計算,從輸入層中提取特徵。隱藏層越多,模型就越能表達複雜的模式和非線性關係。

輸出層 (Output Layer):輸出層的神經元數取決於具體任務。如果是二元分類,輸出層有一個神經元;如果是多分類,則有對應的神經元數。輸出層中的激活函數通常是 softmax(用於多分類問題)或 sigmoid(用於二元分類問題)。

  1. 激活函數

ReLU (Rectified Linear Unit):ReLU 是目前最常用的激活函數之一。

  1. 反向傳播 (Backpropagation) 和梯度下降
    MLP 通過 反向傳播 算法進行學習,該算法計算損失函數對每個權重和偏置的偏導數,然後使用 梯度下降 或其變體來更新這些參數,最小化損失。

MLP 與單層感知器的區別
單層感知器 只能處理線性可分的數據,而 MLP 通過多層和非線性激活函數,可以學習和擬合非線性決策邊界。
MLP 的隱藏層越多,模型的表達能力越強,但也可能增加過擬合的風險。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score, confusion_matrix

X, y = make_moons(n_samples=1000, noise=0.2, random_state=42)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

mlp = MLPClassifier(hidden_layer_sizes=(10, 10), activation='relu', solver='adam', max_iter=2000)
mlp.fit(X_train, y_train)

y_pred = mlp.predict(X_test)

# 計算準確率
accuracy = accuracy_score(y_test, y_pred)
print(f"測試集準確率: {accuracy:.2f}")

# 混淆矩陣
conf_matrix = confusion_matrix(y_test, y_pred)
print("混淆矩陣:")
print(conf_matrix)

plt.figure(figsize=(10, 6))
x_min, x_max = X[:, 0].min() - 0.5, X[:, 0].max() + 0.5
y_min, y_max = X[:, 1].min() - 0.5, X[:, 1].max() + 0.5
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01), np.arange(y_min, y_max, 0.01))
Z = mlp.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.8, cmap='coolwarm')

plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap='coolwarm', edgecolor='k', s=50)
plt.title("MLP 的決策邊界")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.show()

數據集:我們使用 make_moons 函數生成了一個非線性可分的二元分類數據集,這個數據集非常適合展示 MLP 的非線性分類能力。

模型訓練:我們使用 MLPClassifier 類來訓練一個含有兩個隱藏層的多層感知器模型,並將每個隱藏層設置為 10 個神經元。激活函數選擇 ReLU,優化算法使用 Adam。

預測與評估:模型在測試集上進行預測,並計算出準確率和混淆矩陣。結果顯示了模型的分類效果。

決策邊界:我們繪製了 MLP 模型的決策邊界,展示了模型如何學習到非線性邊界來區分兩個類別。

多層感知器 (MLP) 是一種強大的神經網絡模型,能夠處理非線性分類和回歸問題。通過隱藏層和非線性激活函數,MLP 可以學習複雜的決策邊界。這個範例展示了如何使用 Python 來構建和訓練 MLP 模型,並應用於非線性可分的分類問題。隨著網絡層數的增加和隱藏神經元的增多,MLP 能夠處理更加複雜的問題,並在不同的應用領域(如圖像識別、語音識別、自然語言處理)中廣泛使用。


上一篇
DAY24 Single Layer Perceptron24/30
下一篇
DAY26 卷積神經網絡 Convolutional Neural Network 26/30
系列文
機器學習與深度學習背後框架與過程論文與實作28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言